package com.main.controller;

import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import com.generico.dto.ctg.CtgCatalogo;
import com.generico.dto.ctg.CtgProducto;
import com.generico.exception.AsiWebException;
import com.main.cliente.dto.PedidoDetalle;
import com.main.cliente.dto.SgiPersona;
import com.main.dao.AsistenciaTecnicaDAO;
import com.main.dao.ClienteDAO;
import com.main.dao.DetalleRequisicionDao;
import com.main.dao.RequisicionDao;
import com.main.dao.SgiPersonaDao;
import com.main.java.AsistenciaTecnica;
import com.main.java.Cliente;
import com.main.java.Empleado;
import com.main.java.Producto;
import com.main.java.Requisicion;
import com.main.service.AsistenciaTecnicaService;
import com.web.security.CustomUser;
import com.web.util.GenericoUtil;

@Controller
@RequestMapping("/gerente")
public class GerenteAutorizacionRequisicionController extends BaseController{
	
	//declaracion de variable tipo RequisicionDao
	@Autowired
	private RequisicionDao requisicionDao;

	//declaracion de variable tipo DetalleRequisicionDao
	@Autowired
	private DetalleRequisicionDao detalleRequisicionDao;
	
	@RequestMapping(value = "/gerenteRequisicionInventario")
	public String autorizacionRequisicionInventario(HttpServletRequest request, ModelMap model) {
		model.put("requisiciones", JSONArray.fromObject(requisicionDao.obtenerRequisiciones()));
		model.put("userName", GenericoUtil.getUserName());
		model.put("usuarioId", GenericoUtil.getSgdUsuarioIdFromAcegi());
		model.put("rol", GenericoUtil.getRol());
		return "empleado/gerenteRequisicionInventario";
	}
	
	@RequestMapping(value = "/cargarHijoPorPadreId", method = {RequestMethod.POST})
	public void save(HttpServletResponse response, @RequestParam(value = "idRequisicion") Long idRequisicion) {
		Map<String, Object> result = new HashMap<String, Object>();
		try{
				if(idRequisicion == null){
					result.put(FAILURE, true);
					result.put(MESSAGE, "No se puede actualizar la informaci\u00F3n de una Requisicion que no existe");
				}else{
						result.put(SUCCESS, true);
						result.put(MESSAGE, "Detalle de Raquisicion cargados");
						List<Object[]> list = detalleRequisicionDao.obtenerDetalleRequisicionPorId(idRequisicion);
						result.put("detalleRequicisiones", JSONArray.fromObject(list));
						result.put(SUCCESS, true);
						result.put(MESSAGE, "Detalle de Requisicion cargados");
						
						
				}
		}catch(Exception e){
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.getExceptionMessage(e));
		}
		serializeObject(result, response);
	}
	
	@RequestMapping(value = "/guardarRequisicion", method = RequestMethod.POST)
	public void guardarRequisicion(HttpServletResponse response,
			@RequestParam(value = "idRequsiciones") String idRequsiciones,
			@RequestParam(value = "estadoRequisiciones") String estadoRequisiciones,
			@RequestParam(value = "clienteId") Long clienteId){
		Map<String, Object> result = new HashMap<String, Object>();

		try{
			if(idRequsiciones.isEmpty()){
				result.put(FAILURE, true);
				result.put(MESSAGE, "Debe elegir productos para poder continuar");
			}else{
				
				/**Quitando virgulias y dejando id**/
				String[] idRequisicion = idRequsiciones.split("~");
				String[] estados = estadoRequisiciones.split("~");
				boolean estadoH = false;
				
				for (int i = 0; i < idRequisicion.length; i++) {
					if (estados[i].equals("true")){
					estadoH = true;
					} else if (estados[i].equals("false")){
						estadoH = false;
					}
					Requisicion requisicion = new Requisicion();
					requisicion = requisicionDao.obtenerRequisicionPorId(Long.parseLong(idRequisicion[i]));
					requisicion.setRequisicionEstado(estadoH);
					requisicionDao.guardarRequisicion(requisicion);
				}
				

				result.put(MESSAGE, "Requisicion Actualizada!");
				result.put(SUCCESS, true);
				
			}

		} catch (AsiWebException e) {
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.getExceptionMessage(e));
			logger.error(e, e);
		} catch (Exception e) {
			result.put(FAILURE, true);
			result.put(MESSAGE, GenericoUtil.ERROR_MESSAGE);
			logger.error(e, e);
		}
		serializeObject(result, response);
	}
}
